package model

import (
	"time"

	"gorm.io/gorm"
)

// Resource 资源（菜单/权限）模型
type Resource struct {
	ID        uint           `gorm:"primaryKey" json:"id"`
	ParentID  uint           `gorm:"type:int;default:0;comment:父级ID" json:"parentId"`
	Type      int8           `gorm:"type:tinyint;not null;comment:类型 1-菜单 2-按钮" json:"type"`
	Name      string         `gorm:"type:varchar(50);not null;comment:资源名称" json:"name"`
	Code      string         `gorm:"type:varchar(100);uniqueIndex;not null;comment:权限编码" json:"code"`
	Path      string         `gorm:"type:varchar(200);comment:路由路径" json:"path"`
	Component string         `gorm:"type:varchar(200);comment:组件路径" json:"component"`
	Icon      string         `gorm:"type:varchar(100);comment:图标" json:"icon"`
	Sort      int            `gorm:"type:int;default:0;comment:排序" json:"sort"`
	IsHidden  bool           `gorm:"type:tinyint(1);default:0;comment:是否隐藏" json:"isHidden"`
	IsCache   bool           `gorm:"type:tinyint(1);default:0;comment:是否缓存" json:"isCache"`
	Status    int8           `gorm:"type:tinyint;default:1;comment:状态 0-禁用 1-启用" json:"status"`
	Remark    string         `gorm:"type:varchar(500);comment:备注" json:"remark"`
	CreatedAt time.Time      `json:"createdAt"`
	UpdatedAt time.Time      `json:"updatedAt"`
	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`

	// 子资源
	Children []*Resource `gorm:"-" json:"children,omitempty"`
}

// TableName 指定表名
func (Resource) TableName() string {
	return "sys_resource"
}
